library(Seurat)
library(SingleR)
library(celldex)
library(SeuratDisk)
library(clustree)
PS: The hdf5 file was loaded on scanpy and the files were saved in this format for ease of use. (code attached in the email)
matrix_path <- "./seurat_conversion/counts.mtx"
features_path <- "./seurat_conversion/features.tsv"
barcodes_path <- "./seurat_conversion/barcodes.tsv"
# Read in the matrix, features, and barcodes as a Seurat object
obj <- CreateSeuratObject(counts = ReadMtx(mtx = matrix_path,features = features_path, cells = barcodes_path, feature.column = 1 ), meta.data = read.csv("metadata.csv", row.names = 1))
## Warning: Feature names cannot have underscores ('_'), replacing with dashes
## ('-')
## Warning: Feature names cannot have underscores ('_'), replacing with dashes
## ('-')
obj[["percent.mt"]] <- PercentageFeatureSet(obj, pattern = "^MT-")
FeatureScatter(obj, feature1 = "nCount_RNA", feature2 = "nFeature_RNA")
#Pre-process
obj <- NormalizeData(obj)
obj <- FindVariableFeatures(obj)
obj <- ScaleData(obj)
## Centering and scaling data matrix
#PCA
obj <- RunPCA(obj, features = VariableFeatures(object = obj))
## PC_ 1
## Positive: CD37, CORO1A, ARHGDIB, PTPRC, LSP1, LAPTM5, RAC2, LCP1, CD74, HLA-DRA
## ITGB2, HLA-B, HCST, SRGN, HLA-DRB1, CD52, HLA-DPA1, TAGAP, TYROBP, RCSD1
## ALOX5AP, FCER1G, CD69, NCF1, AIF1, LTB, SPI1, LST1, HLA-DPB1, DUSP2
## Negative: MDK, NFIB, CALD1, SPARC, TPM1, RBP1, MEG3, COL1A2, CRIP2, FN1
## ID1, COL3A1, COL1A1, COL6A2, BEX3, IGFBP5, MMP2, PTN, MFAP2, COL4A2
## MYL9, MAP1B, CPE, FBLN1, CKB, TPM2, CLU, ELN, COL5A2, KRT8
## PC_ 2
## Positive: AGR3, C1orf194, TSPAN1, C20orf85, FAM183A, SMIM22, C9orf24, CAPS, FXYD3, CCDC78
## CAPSL, ZMYND10, MORN5, FAM92B, RSPH1, PIFO, SNTN, C5orf49, C11orf88, FAM216B
## TEKT1, DYNLRB2, LRRC46, DNAAF1, WDR38, TMEM190, DNAH5, DNAH12, SPAG6, C22orf15
## Negative: VIM, CALD1, RACK1, FN1, COL5A2, AKAP12, BEX3, COL6A2, TPM2, COL4A2
## COL4A1, COL3A1, GPC6, MMP2, NR2F1, ZEB2, CDH11, PRKG1, UNC5C, SPARC
## ADGRB3, RBP1, COL1A2, LSAMP, COL6A3, PTPRG, ADGRL3, ROR1, ZFPM2, POSTN
## PC_ 3
## Positive: GNB2L1, SEPP1, GLTSCR2, NGFRAP1, ATP5G2, ATP5L, ATP5E, S100A11, C14orf2, ATP5I
## LGALS1, TCEB2, TM4SF1, UQCR11.1, ATP5G3, ELN, JUNB, B2M, IFITM3, ATP5B
## ATP5J2, MGP, CAV1, USMG5, PTRF, IGF2, A2M, IGFBP4, ZFP36, SEPW1
## Negative: ELAVL4, LINC00682, STMN2, CD24, INA, CHRNA3, KIF21A, PHOX2B, PHOX2A, STMN4
## SCG2, NEFM, PRPH, BEX1, GAP43, NEFL, EML5, PCSK1N, HAND2, CTNNA2
## ANK2, UCHL1, SCG3, ASCL1, CRABP1, HAND2-AS1, TUBB2B, EEF1A2, TAC3, NNAT
## PC_ 4
## Positive: MNDA, CSF3R, S100A8, FCN1, C5AR1, FPR1, S100A9, LYZ, RETN, PLAUR
## S100A12, BCL2A1, CXCL8, IL1B, SERPINA1, CD14, SMIM25, TYROBP, CD68, AQP9
## FGL2, FCER1G, CYBB, CDA, CSF1R, MS4A6A, IL1RN, MCEMP1, CTSS, IFI30
## Negative: PTPRCAP, CD79A, CD79B, VPREB3, TCL1A, IGHM, FAM129C, MZB1, GNB2L1, GLTSCR2
## CD69, ATP5E, ATP5L, ATP5G2, IGLL5, C14orf2, FCRLA, ATP5I, ATP5G3, TCEB2
## UQCR11.1, LTB, CD19, ATP5B, FCMR, ATP5J2, USMG5, NGFRAP1, CD38, CD72
## PC_ 5
## Positive: ELAVL4, STMN2, CHRNA3, LINC00682, INA, PRPH, STMN4, PHOX2B, PHOX2A, SCG2
## BEX1, RTN1, GAP43, NEFL, WFDC2, CRABP1, HAND2, NEFM, GNB2L1, EML5
## ASCL1, EEF1A2, CSTA, SCGB3A1, GLTSCR2, HAND2-AS1, ATP5G3, HBM, AHSP, S100A9
## Negative: C11orf88, CAPSL, FAM216B, FAM92B, SNTN, TEKT1, C11orf97, MORN5, WDR38, C22orf15
## CFAP126, DNAH9, LRRC46, DNAH12, EFCAB1, ZMYND10, TUBA4B, ROPN1L, FAM183A, AL357093.2
## SPAG6, DYNLRB2, CAVIN1, C5orf49, CFAP53, C20orf85, CFAP157, TEKT2, AC007906.2, CAV1
ElbowPlot(obj) #Knee at 20 PC
DimHeatmap(obj, dims = 1:10, cells = 500, balanced = TRUE) #Suggests likely existence of batch effect - look for biological reasons for variations
Idents(obj) <- "platform"
DimPlot(obj, reduction = "pca")
### Clustering of un-integrated object
#Clustering
obj <- FindNeighbors(obj, dims = 1:20)
## Computing nearest neighbor graph
## Computing SNN
obj <- FindClusters(obj, resolution = c(0.2, 0.3, 0.4, 0.5, 0.7, 0.8))
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
##
## Number of nodes: 21486
## Number of edges: 723161
##
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.9810
## Number of communities: 31
## Elapsed time: 1 seconds
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
##
## Number of nodes: 21486
## Number of edges: 723161
##
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.9761
## Number of communities: 36
## Elapsed time: 1 seconds
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
##
## Number of nodes: 21486
## Number of edges: 723161
##
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.9722
## Number of communities: 39
## Elapsed time: 1 seconds
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
##
## Number of nodes: 21486
## Number of edges: 723161
##
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.9685
## Number of communities: 43
## Elapsed time: 1 seconds
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
##
## Number of nodes: 21486
## Number of edges: 723161
##
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.9622
## Number of communities: 47
## Elapsed time: 1 seconds
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
##
## Number of nodes: 21486
## Number of edges: 723161
##
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.9593
## Number of communities: 51
## Elapsed time: 1 seconds
clustree::clustree(obj, prefix = "RNA_snn_res.")
Idents(obj) <- "RNA_snn_res.0.4" #least crossover
#UMAP
obj <- RunUMAP(obj, dims = 1:20)
## Warning: The default method for RunUMAP has changed from calling Python UMAP via reticulate to the R-native UWOT using the cosine metric
## To use Python UMAP via reticulate, set umap.method to 'umap-learn' and metric to 'correlation'
## This message will be shown once per session
## 19:40:46 UMAP embedding parameters a = 0.9922 b = 1.112
## 19:40:47 Read 21486 rows and found 20 numeric columns
## 19:40:47 Using Annoy for neighbor search, n_neighbors = 30
## 19:40:47 Building Annoy index with metric = cosine, n_trees = 50
## 0% 10 20 30 40 50 60 70 80 90 100%
## [----|----|----|----|----|----|----|----|----|----|
## **************************************************|
## 19:40:48 Writing NN index file to temp file C:\Users\MEENAK~1\AppData\Local\Temp\RtmpqsFoIK\file47187fd05842
## 19:40:48 Searching Annoy index using 1 thread, search_k = 3000
## 19:40:52 Annoy recall = 100%
## 19:40:52 Commencing smooth kNN distance calibration using 1 thread with target n_neighbors = 30
## 19:40:54 Initializing from normalized Laplacian + noise (using irlba)
## 19:40:55 Commencing optimization for 200 epochs, with 889856 positive edges
## 19:41:11 Optimization finished
DimPlot(obj, reduction = "umap", label = TRUE)
DimPlot(obj, reduction = "umap", group.by = "developmental_stage", label = TRUE) #Likely cause for batch effect due to biological differences
DimPlot(obj, reduction = "umap", group.by = "site", label = TRUE) #Likely cause for batch effect due to biological differences
DimPlot(obj, reduction = "umap", group.by = "platform", label = TRUE) #Some technical variation exists
As seen in the above UMAP plots, the batch effect can exist dueto the different stages in developement or can be of technical origin. Correcting for batch effects wrt technical variable - platforms.
#Batch effect corrections wrt platform
obj.list <- SplitObject(obj, split.by = "platform")
obj.list <- lapply(X = obj.list, FUN = function(x) {
x <- NormalizeData(x)
x <- FindVariableFeatures(x, selection.method = "vst", nfeatures = 5000)
})
features <- SelectIntegrationFeatures(object.list = obj.list)
anchors <- FindIntegrationAnchors(object.list = obj.list, anchor.features = features)
## Scaling features for provided objects
## Finding all pairwise anchors
## Warning: Layer counts isn't present in the assay object; returning NULL
## Warning: Layer counts isn't present in the assay object; returning NULL
## Running CCA
## Merging objects
## Finding neighborhoods
## Finding anchors
## Found 8700 anchors
## Filtering anchors
## Retained 6500 anchors
## Warning: Layer counts isn't present in the assay object; returning NULL
## Warning: Layer counts isn't present in the assay object; returning NULL
## Running CCA
## Merging objects
## Finding neighborhoods
## Finding anchors
## Found 5888 anchors
## Filtering anchors
## Retained 4572 anchors
## Warning: Layer counts isn't present in the assay object; returning NULL
## Warning: Layer counts isn't present in the assay object; returning NULL
## Running CCA
## Merging objects
## Finding neighborhoods
## Finding anchors
## Found 6097 anchors
## Filtering anchors
## Retained 5198 anchors
combined <- IntegrateData(anchorset = anchors)
## Warning: Layer counts isn't present in the assay object; returning NULL
## Warning: Layer counts isn't present in the assay object; returning NULL
## Merging dataset 3 into 2
## Extracting anchors for merged samples
## Finding integration vectors
## Finding integration vector weights
## Integrating data
## Warning: Layer counts isn't present in the assay object; returning NULL
## Warning: Layer counts isn't present in the assay object; returning NULL
## Warning: Layer counts isn't present in the assay object; returning NULL
## Merging dataset 1 into 2 3
## Extracting anchors for merged samples
## Finding integration vectors
## Finding integration vector weights
## Integrating data
## Warning: Layer counts isn't present in the assay object; returning NULL
## Warning: Layer counts isn't present in the assay object; returning NULL
## Warning: Layer counts isn't present in the assay object; returning NULL
DefaultAssay(combined) <- "integrated"
combined <- ScaleData(combined, verbose = FALSE)
combined <- RunPCA(combined, npcs = 30, verbose = FALSE)
combined <- RunUMAP(combined, reduction = "pca", dims = 1:30)
## 19:46:36 UMAP embedding parameters a = 0.9922 b = 1.112
## 19:46:36 Read 21486 rows and found 30 numeric columns
## 19:46:36 Using Annoy for neighbor search, n_neighbors = 30
## 19:46:36 Building Annoy index with metric = cosine, n_trees = 50
## 0% 10 20 30 40 50 60 70 80 90 100%
## [----|----|----|----|----|----|----|----|----|----|
## **************************************************|
## 19:46:37 Writing NN index file to temp file C:\Users\MEENAK~1\AppData\Local\Temp\RtmpqsFoIK\file471843c7b1f
## 19:46:37 Searching Annoy index using 1 thread, search_k = 3000
## 19:46:41 Annoy recall = 100%
## 19:46:41 Commencing smooth kNN distance calibration using 1 thread with target n_neighbors = 30
## 19:46:43 Initializing from normalized Laplacian + noise (using irlba)
## 19:46:44 Commencing optimization for 200 epochs, with 916816 positive edges
## 19:47:00 Optimization finished
combined <- FindNeighbors(combined, reduction = "pca", dims = 1:30)
## Computing nearest neighbor graph
## Computing SNN
combined <- FindClusters(combined, resolution = c(0.2, 0.3, 0.4, 0.5, 0.7, 0.8))
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
##
## Number of nodes: 21486
## Number of edges: 781467
##
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.9754
## Number of communities: 21
## Elapsed time: 1 seconds
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
##
## Number of nodes: 21486
## Number of edges: 781467
##
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.9699
## Number of communities: 27
## Elapsed time: 1 seconds
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
##
## Number of nodes: 21486
## Number of edges: 781467
##
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.9654
## Number of communities: 30
## Elapsed time: 1 seconds
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
##
## Number of nodes: 21486
## Number of edges: 781467
##
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.9615
## Number of communities: 31
## Elapsed time: 1 seconds
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
##
## Number of nodes: 21486
## Number of edges: 781467
##
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.9543
## Number of communities: 35
## Elapsed time: 1 seconds
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
##
## Number of nodes: 21486
## Number of edges: 781467
##
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.9511
## Number of communities: 37
## Elapsed time: 1 seconds
DimPlot(combined, reduction = "umap", label = TRUE, repel = TRUE)
DimPlot(combined, reduction = "umap", group.by = "platform")
DimPlot(combined, reduction = "umap", group.by = "developmental_stage")
DimPlot(combined, reduction = "umap", group.by = "site", label = TRUE)
FeaturePlot(combined, features = "percent.mt")
Cluster 7 shows presence of a few cells where mitochondrial genes are expressed.
The clusters were annotated on the basis of the presence of markers derived from these papers as well as on the basis of cluster markers found using FindAllMarkers() and EnrichR. Avoiding automatic annotation as the dataset requires a reference with embryonic cells for better accuracy.
References: 1. https://pmc.ncbi.nlm.nih.gov/articles/PMC7780123/ 2. https://www.cell.com/cell/fulltext/S0092-8674(22)01415-5
#Annotation - Marker genes
#PS: Refer to papers 1&2 for gene markers in embryonic cells create list from dot plots
DefaultAssay(combined) <- "RNA"
gene_lists <- list(
Progenitors = c("CD34", "CD74", "MPO", "PLXNC1", "DEPTO", "SOS1", "TTC27", "PPBP", "LGALS1", "KIT", "LMO4", "CPA3","SLC16A9", "FAM177B", "KIF18B", "KIF15","TMCC2", "HBB"),
Overall = c("SALL1", "HTRA1", "LILRB5", "CD209", "S100A9", "S100A8", "CD1C", "CLEC10A", "CCSER1", "NEGR1", "CCDC50", "AC023590.1", "BIRC3", "KDM2B", "FAM46C", "XBP1", "VPREB3", "PAX5", "SORCS1", "JMY", "KLRD1", "GNLY", "TENM1", "CD5", "RHCE", "SLC25A21", "CPA3", "IL1RL1", "TMEM40", "PF4", "DEPTO", "PDZD8", "MPO", "PRTN3"),
Myeloid = c("ORM1", "FCGR3B", "MPO", "RNASE2", "MKI67", "CD14", "S100A12", "RBP7", "CX3CR1", "METTL7", "CLQA", "TREM2", "APOE",
"SPP1", "LYVE1", "CD1C", "FCER1A", "CLEC10A", "FCGBP", "CES1", "MTMR11", "FCGR3A", "CD300E", "CCR7", "CCL19",
"LAMP3", "MMP9", "GCH1", "GBP2", "TRAF1", "CCL22", "GZMB", "JCHAIN", "CLEC9A", "XCR1", "SIGLEC6", "SPINK2",
"CD34", "NPR3", "TESPA1", "IGHM", "PRSS2", "ELANE", "DEFA4", "S100A8", "FCN1", "TPSB2", "GATA2", "MYH10",
"GATA1", "CLC", "IL5RA", "CCR3", "IL3RA", "ZNF302", "LCN2", "CAMP", "PF4", "MYL9", "CLCN7", "HIST1H4H"),
Lymphoid = c("PTPRC", "CCR9", "RAG1", "PTGDR2", "HPGDS", "CCR6", "KIT", "CA2", "SCN1B", "NCAM1", "HPN", "GZMK", "TNFRSF9",
"RAMP1", "GZMB", "FCRL6", "MKI67", "FOXP3", "CD4", "CD40LG", "CD8A", "KLRC2", "ZNF683", "IFNG-AS1", "SLC4A10",
"CXCR6", "KLRB1", "IL4I1", "NPDC1"),
Erythroid_Endothelial = c("GDF15", "HMOX1", "HBE1", "GYPA", "HBB", "KLF1", "GATA1", "MKI67", "CPEB4", "XPO7", "UCP2", "PROX1", "STAB2",
"AKR1C2", "RNASE4", "SCG3", "OMAD", "SSUH2", "DKK2", "GRIA2", "GJA5", "APOL4", "CA4", "S100A3", "ACKR1",
"HDAC9", "PLVAP", "THY1", "CD24", "KIT", "IL7R", "EGLN1"),
PNS = c("FGFBP2", "MFNG", "KCNIP4", "TM4SF4", "CHODL", "NXPH4", "DPY5", "DPY4", "PCP4", "SV2C", "PENK", "TMEM176B",
"CXCL12", "GPNMB", "MICALL2", "APOA1", "MBP", "TYMS", "COL20A1", "ITM2A", "ALDH1A1", "OLFML2A", "HNRNPA1P48",
"CYR61"),
B_Lymphoid = c("CD9", "CD27", "CD334", "DNTT", "IL7R", "TYMS", "IGLL5", "TCL1A", "LTB", "LINC01013", "TNFRSF17", "AL133467.1",
"CDHR3", "IGF2.1", "CEBPD", "CCL22", "CCR10", "CD5", "IGHD", "JCHAIN", "BCL7A", "HHEX", "CD38", "VPREB1", "CCND3")
)
DotPlot(combined, assay= 'RNA',features = c("CD4","CCR7", "LEF1", "TCF7", "AQP3", "CD69", "CCR6", "CXCR6", "CCL5", "PRDM1", "FOXP3", "CD8A","GZMK", "GZMB", "GNLY", "PRF1"))
Cluster 3 has Cytotoxic T cells, 18 has NAive CD4+ T cells, 6 may be central memory T cells and 31 has NK cells.
#Plot for identifying Progenitor clusters
DotPlot(combined, features = gene_lists$Progenitors, dot.scale = 8) + RotatedAxis()
## Warning: The following requested variables were not found: DEPTO
Cluster 20 and 8 are Endothelium Progenitors (likely vascular). 19 has Basophil Mast cells.
#Plot for identifying PNS clusters
DotPlot(combined, features = gene_lists$Overall, dot.scale = 8) + RotatedAxis()
## Warning: The following requested variables were not found: DEPTO
#Plot for identifying PNS clusters
DotPlot(combined, features = gene_lists$PNS, dot.scale = 8) + RotatedAxis()
## Warning: The following requested variables were not found: DPY5, DPY4
#Plot for identifying Lymphoid cells
DotPlot(combined, features = gene_lists$Lymphoid, dot.scale = 8) + RotatedAxis()
Immune cell clusters are likely 3, 5, 6, 11, 12, 18, 22, 31, 35. Cluster 6 likely has ILC3 cells.
#Plot for identifying Myeloid cells
DotPlot(combined, features = gene_lists$Myeloid, dot.scale = 8) + RotatedAxis()
## Warning: The following requested variables were not found: METTL7, CLQA
#Plot for identifying B cells
DotPlot(combined, features = gene_lists$B_Lymphoid, dot.scale = 8) + RotatedAxis()
## Warning: The following requested variables were not found: CD334, IGF2.1
#Plot for identifying Erythroid and Endothelial
DotPlot(combined, features = gene_lists$Erythroid_Endothelial, dot.scale = 8) + RotatedAxis()
## Warning: The following requested variables were not found: OMAD
From this plot we can confidently annotate clusters 33 (Primitive Erythrocyte), 14(Definitive Reticulocyte),and 15 (Lymphatic Endothelium) while cluster 20 (Arterial Endothelium) can be annotated with a lower confidence level as the markers are not as highly expressed. Cluster 8 has cells that are a part of Vascular Endothelium.36 is likely Venous Endothelium but the confidence for this annotation is very low as it does not merge close to clusters 20 and 8, and also expresses neural progenitor marker FGFBP2 while not merging with 9 or 0.
All remaining clusters were annotated on the basis of markers, by surveying EnrichR using the top 10 positively enriched marker genes for the clusters. The file has been attached in the email.
Idents(combined) <- combined$integrated_snn_res.0.8
new.cluster.ids <- c("PCP4+ Neuron", "DCLK1+ Progenitors", "Clara Progenitors", "Cytotoxic T", "B", "CD1C+ DC", "Central Memory T", "Unknown", "Vascular Endothelium", "Schwann Precursor", "Neural Progenitors", "S100A12+ Classical Monocytes", "B", "Neuronal Progenitors" ,"Definitive Reticulocyte", "Lymphatic Endothelium", "Microglia", "Unknown", "Naive CD4+", "Basophil Mast", "Arterial Endothelium", "Unknown", "DC", "Promylocyte-like", "Epithelium", "Clara Progenitors", "Neuroendocrine", "Neuronal Progenitors", "Megakaryocyte", "DCLK1+ Progenitors", "Neural Progenitors", "NK", "BMEC", "Primitive Erythrocyte","Epithelium", "pDC" ,"Venous Endothelium")
names(new.cluster.ids) <- levels(combined)
combined <- RenameIdents(combined, new.cluster.ids)
DimPlot(combined, reduction = "umap", label = TRUE, pt.size = 0.5)
sessionInfo()
## R version 4.3.2 (2023-10-31 ucrt)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 11 x64 (build 22631)
##
## Matrix products: default
##
##
## locale:
## [1] LC_COLLATE=English_United Arab Emirates.utf8
## [2] LC_CTYPE=English_United Arab Emirates.utf8
## [3] LC_MONETARY=English_United Arab Emirates.utf8
## [4] LC_NUMERIC=C
## [5] LC_TIME=English_United Arab Emirates.utf8
##
## time zone: America/New_York
## tzcode source: internal
##
## attached base packages:
## [1] stats4 stats graphics grDevices utils datasets methods
## [8] base
##
## other attached packages:
## [1] clustree_0.5.1 ggraph_2.2.1
## [3] ggplot2_3.5.1 SeuratDisk_0.0.0.9021
## [5] celldex_1.10.1 SingleR_2.2.0
## [7] SummarizedExperiment_1.30.2 Biobase_2.60.0
## [9] GenomicRanges_1.52.1 GenomeInfoDb_1.36.4
## [11] IRanges_2.34.1 S4Vectors_0.38.2
## [13] BiocGenerics_0.46.0 MatrixGenerics_1.12.3
## [15] matrixStats_1.3.0 SeuratObject_5.0.2
## [17] Seurat_4.4.0
##
## loaded via a namespace (and not attached):
## [1] RcppAnnoy_0.0.22 splines_4.3.0
## [3] later_1.3.2 bitops_1.0-8
## [5] filelock_1.0.3 tibble_3.2.1
## [7] polyclip_1.10-7 lifecycle_1.0.4
## [9] hdf5r_1.3.11 globals_0.16.3
## [11] lattice_0.22-6 MASS_7.3-60
## [13] backports_1.5.0 magrittr_2.0.3
## [15] plotly_4.10.4 sass_0.4.9
## [17] rmarkdown_2.28 jquerylib_0.1.4
## [19] yaml_2.3.10 httpuv_1.6.15
## [21] sctransform_0.4.1 spam_2.10-0
## [23] sp_2.1-4 spatstat.sparse_3.1-0
## [25] reticulate_1.38.0 cowplot_1.1.3
## [27] pbapply_1.7-2 DBI_1.2.3
## [29] RColorBrewer_1.1-3 abind_1.4-5
## [31] zlibbioc_1.46.0 Rtsne_0.17
## [33] purrr_1.0.2 RCurl_1.98-1.16
## [35] tweenr_2.0.3 rappdirs_0.3.3
## [37] GenomeInfoDbData_1.2.10 ggrepel_0.9.5
## [39] irlba_2.3.5.1 listenv_0.9.1
## [41] spatstat.utils_3.1-0 goftest_1.2-3
## [43] spatstat.random_3.3-1 fitdistrplus_1.2-1
## [45] parallelly_1.38.0 DelayedMatrixStats_1.22.6
## [47] leiden_0.4.3.1 codetools_0.2-19
## [49] DelayedArray_0.26.7 ggforce_0.4.2
## [51] tidyselect_1.2.1 farver_2.1.2
## [53] viridis_0.6.5 ScaledMatrix_1.8.1
## [55] BiocFileCache_2.8.0 spatstat.explore_3.3-2
## [57] jsonlite_1.8.8 tidygraph_1.3.1
## [59] progressr_0.14.0 ggridges_0.5.6
## [61] survival_3.7-0 tools_4.3.0
## [63] ica_1.0-3 Rcpp_1.0.13
## [65] glue_1.7.0 gridExtra_2.3
## [67] xfun_0.47 dplyr_1.1.4
## [69] withr_3.0.1 BiocManager_1.30.25
## [71] fastmap_1.2.0 fansi_1.0.6
## [73] digest_0.6.37 rsvd_1.0.5
## [75] R6_2.5.1 mime_0.12
## [77] colorspace_2.1-1 scattermore_1.2
## [79] tensor_1.5 spatstat.data_3.1-2
## [81] RSQLite_2.3.7 utf8_1.2.4
## [83] tidyr_1.3.1 generics_0.1.3
## [85] data.table_1.16.0 graphlayouts_1.1.1
## [87] httr_1.4.7 htmlwidgets_1.6.4
## [89] S4Arrays_1.0.6 uwot_0.2.2
## [91] pkgconfig_2.0.3 gtable_0.3.5
## [93] blob_1.2.4 lmtest_0.9-40
## [95] XVector_0.40.0 htmltools_0.5.8.1
## [97] dotCall64_1.1-1 scales_1.3.0
## [99] png_0.1-8 spatstat.univar_3.0-0
## [101] knitr_1.48 rstudioapi_0.16.0
## [103] reshape2_1.4.4 checkmate_2.3.2
## [105] nlme_3.1-166 curl_5.2.2
## [107] cachem_1.1.0 zoo_1.8-12
## [109] stringr_1.5.1 BiocVersion_3.17.1
## [111] KernSmooth_2.23-24 parallel_4.3.0
## [113] miniUI_0.1.1.1 AnnotationDbi_1.62.2
## [115] pillar_1.9.0 grid_4.3.0
## [117] vctrs_0.6.5 RANN_2.6.2
## [119] promises_1.3.0 BiocSingular_1.16.0
## [121] dbplyr_2.5.0 beachmat_2.16.0
## [123] xtable_1.8-4 cluster_2.1.4
## [125] evaluate_0.24.0 cli_3.6.1
## [127] compiler_4.3.0 rlang_1.1.4
## [129] crayon_1.5.3 future.apply_1.11.2
## [131] labeling_0.4.3 plyr_1.8.9
## [133] stringi_1.8.4 viridisLite_0.4.2
## [135] deldir_2.0-4 BiocParallel_1.36.0
## [137] munsell_0.5.1 Biostrings_2.68.1
## [139] lazyeval_0.2.2 spatstat.geom_3.3-2
## [141] Matrix_1.6-5 ExperimentHub_2.8.1
## [143] patchwork_1.2.0 sparseMatrixStats_1.12.2
## [145] bit64_4.0.5 future_1.34.0
## [147] KEGGREST_1.40.1 shiny_1.9.1
## [149] highr_0.11 interactiveDisplayBase_1.38.0
## [151] AnnotationHub_3.8.0 ROCR_1.0-11
## [153] igraph_2.0.3 memoise_2.0.1
## [155] bslib_0.8.0 bit_4.0.5